Previous topicNext topic
Help > TCP and UDP Communications >
Simple Mail Transfer Protocol (SMTP)

One of the easiest high-level TCP protocols to use is SMTP for sending an email message. This application simply connects to an SMTP server via TCP, identifies itself, and identifies who the message is for, sends the text of the message, and finally says goodbye. As each line of text is sent to the server, it returns a status code and message to indicate progress. The following code demonstrates this:

 

' Be sure to change the following two string equates

' to the name of your SMTP mail server and your email

' address.

#COMPILE EXE

 

$mailhost = "mailserver.mydomain.com"

$mailfrom = "email@address.com"

 

FUNCTION PBMAIN() AS LONG

 ' Get the local computer's IP address and name

 HOST ADDR TO ip&

 HOST NAME ip& TO hostname$

 

 ' ** Connect to the mailhost

 hTCP& = FREEFILE

 TCP OPEN "smtp" AT $mailhost AS hTCP&

 IF ERR THEN

   MSGBOX "Error connecting to mailhost"

   EXIT FUNCTION

 ELSE

   TCP LINE hTCP&, buffer$

   IF LEFT$(buffer$, 3) <> "220" THEN

     MSGBOX "Mailhost Error: " & buffer$

     EXIT FUNCTION

   END IF

 END IF

 

 ' Get the local computer's IP address and name

 HOST NAME TO hostname$

 

 ' ** Greet the mailhost

 TCP PRINT hTCP&, "HELO " + hostname$

 TCP LINE hTCP&, buffer$

 IF LEFT$(buffer$, 3) <> "250" THEN

   MSGBOX "HELO Error: " & buffer$

   TCP CLOSE hTCP&

   EXIT FUNCTION

 END IF

 

 ' ** Tell the mailhost who we are

 TCP PRINT hTCP&, "MAIL FROM:<" & $mailfrom & ">"

 TCP LINE hTCP&, buffer$

 IF LEFT$(buffer$, 3) <> "250" THEN

   MSGBOX "MAIL FROM Error: " & buffer$

   TCP CLOSE hTCP&

   EXIT FUNCTION

 END IF

 

 ' ** Tell the mailhost who we want to send the message to

 TCP PRINT hTCP&, "RCPT TO:<info@powerbasic.com>"

 TCP LINE hTCP&, buffer$

 IF LEFT$(buffer$, 3) <> "250" THEN

   MSGBOX "RCPT TO Error: " & buffer$

   TCP CLOSE hTCP&

   EXIT FUNCTION

 END IF

 

 ' ** Now we can send the message

 TCP PRINT hTCP&, "DATA"

 TCP LINE hTCP&, buffer$

 IF LEFT$(buffer$, 3) <> "354" THEN

   MSGBOX "DATA Error: " & buffer$

   TCP CLOSE hTCP&

   EXIT FUNCTION

 END IF

 

 TCP PRINT hTCP&, "From: " & $mailfrom

 TCP PRINT hTCP&, "To: info@powerbasic.com"

 TCP PRINT hTCP&, "Subject: Greetings!"

 TCP PRINT hTCP&, ""

 TCP PRINT hTCP&, "Just wanted to say hello."

 TCP PRINT hTCP&, "This TCP stuff is great!

 

 ' ** End of the message

 TCP PRINT hTCP&, "."

 TCP LINE hTCP&, buffer$

 IF LEFT$(buffer$, 3) <> "250" THEN

   MSGBOX "DATA Error: " & buffer$

   TCP CLOSE hTCP&

   EXIT FUNCTION

 END IF

 

 ' ** Say goodbye

 TCP PRINT hTCP&, "QUIT"

 TCP LINE hTCP&, buffer$

 IF LEFT$(buffer$, 3) <> "221" THEN

   MSGBOX "QUIT Error: " & buffer$

   TCP CLOSE hTCP&

   EXIT FUNCTION

 END IF

 

 TCP CLOSE hTCP&

END FUNCTION

 

The SMTP protocol is fully described in RFC 821 http://www.rfc-editor.org

 

See Also

TCP and UDP Communications

TCP clients and servers

An ECHO client and server using TCP